package com.hanter.android.radlib.util;

import android.content.Context;

public class DimenUnitUtils {

    private Context context;
    private float density;  // 相对于160dpi的比例
    private float scaledDensity; // 字体显示，和density一样，不过有时会根据用户体验而稍微的增加。
    private static DimenUnitUtils sScreenUtils;

    private DimenUnitUtils(Context context) {
        this.context = context;
        density = this.context.getApplicationContext().getResources()
                .getDisplayMetrics().density;
        scaledDensity = this.context.getApplicationContext().getResources()
                .getDisplayMetrics().scaledDensity;
    }

    public static DimenUnitUtils getInstance(Context context) {
        if (sScreenUtils == null) {
            sScreenUtils = new DimenUnitUtils(context);
        }
        return sScreenUtils;
    }

    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public int dip2px(float dpValue) {
        return convert(dpValue * density);
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public int px2dip(float pxValue) {
        return convert(pxValue / density);
    }

    public int sp2px(float spValue) {
        return convert(spValue * scaledDensity);
    }

    public int px2sp(float pxValue) {
        return convert(pxValue / scaledDensity);
    }

    private int convert(float f) {
        final int res = (int) ((f >= 0) ? (f + 0.5f) : (f - 0.5f));
        if (res != 0) return res;
        if (f == 0) return 0;
        if (f > 0) return 1;
        return -1;
    }

}